# 新建+启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  OPTIONS说明（常用）：有些是一个减号，有些是两个减号
    --name="容器新名字"       为容器指定一个名称；
    -d: 后台运行容器并返回容器ID，也即启动守护式容器(后台运行)；

    -i：以交互模式运行容器，通常与 -t 同时使用；
    -t：为容器重新分配一个伪输入终端，通常与 -i 同时使用；
    也即启动交互式容器(前台有伪终端，等待交互)；

    -P: 随机端口映射，大写P
    -p: 指定端口映射，小写p
  启动交互式容器(前台命令行)
    docker run -it centos /bin/bash

# 列出当前所有正在运行的容器
docker ps [OPTIONS]
  OPTIONS说明（常用）：
    -a :列出当前所有正在运行的容器+历史上运行过的
    -l :显示最近创建的容器。
    -n：显示最近n个创建的容器。
    -q :静默模式，只显示容器编号。

# 退出容器
  两种退出方式
    exit
      run进去容器，exit退出，容器停止
    ctrl+p+q
      run进去容器，ctrl+p+q退出，容器不停止

# 启动已停止运行的容器
docker start 容器ID或者容器名

# 重启容器
docker restart 容器ID或者容器名

# 停止容器
docker stop 容器ID或者容器名

# 强制停止容器
docker kill 容器ID或容器名

# 删除已停止的容器
docker rm 容器ID
  一次性删除多个容器实例
    docker rm -f $(docker ps -a -q)
    docker ps -a -q | xargs docker rm

重要：
# 启动守护式容器(后台服务器)
## 在大部分的场景下，我们希望 docker 的服务是在后台运行的， 我们可以过 -d 指定容器的后台运行模式。
docker run -d 容器名
  redis 前后台启动演示case
    前台交互式启动
      docker run -it redis:6.0.8
    后台守护式启动
      docker run -d redis:6.0.8

# 查看容器日志
docker logs 容器ID

# 查看容器内运行的进程
docker top 容器ID

# 查看容器内部细节
docker inspect 容器ID

# 进入正在运行的容器并以命令行交互
docker exec -it 容器ID bashShell
  重新进入docker attach 容器ID
  上述两个区别
    attach 直接进入容器启动命令的终端，不会启动新的进程 用exit退出，会导致容器的停止。
    exec 是在容器中打开新的终端，并且可以启动新的进程 用exit退出，不会导致容器的停止。
  推荐大家使用 docker exec 命令，因为退出容器终端，不会导致容器的停止。
  用之前的redis容器实例进入试试
    进入redis服务
      docker exec -it 容器ID /bin/bash
      docker exec -it 容器ID redis-cli
      一般用-d后台启动的程序，再用exec进入对应容器实例

# 从容器内拷贝文件到主机上
## 容器→主机
docker cp  容器ID:容器内路径 目的主机路径
  docker cp eed664573cbb:/tmp/aa.txt /tmp/

# 导入和导出容器
export 导出容器的内容留作为一个tar归档文件[对应import命令]
import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
  案例
    docker export 容器ID > 文件名.tar
    cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

      docker export a111146f2cf7 > /tmp/a111146f2cf7.tar
      cat /tmp/a111146f2cf7.tar | docker import - zsf/centos:001
      docker run -it zsf/centos:001 /bin/bash
